(Regrowth status timer handler)

D1/B167: B2 60        LDA ($60)
D1/B169: F0 46        BEQ $B1B1      (branch if Regrowth timer value on this
                                      target is zero, meaning it was just set)
D1/B16B: C9 10 0E     CMP #$0E10
D1/B16E: B0 58        BCS $B1C8      (branch if 3600 frames have elapsed)
D1/B170: 1A           INC
D1/B171: 92 60        STA ($60)      (increment timer)
D1/B173: B2 62        LDA ($62)
D1/B175: F0 04        BEQ $B17B      (branch if zero frames remaining until next
                                      healing interval)
D1/B177: 3A           DEC
D1/B178: 92 62        STA ($62)      (decrement frames until next healing interval)
D1/B17A: 60           RTS

D1/B17B: B9 2A 00     LDA $002A,Y    (A = target's Current HP)
D1/B17E: BE 60 00     LDX $0060,Y    (get pointer to target's stat block?)
D1/B181: DF 0F 00 8E  CMP $8E000F,X  (compare A to target's Max HP)
D1/B185: F0 09        BEQ $B190      (branch if current HP = max)
D1/B187: 1A           INC
D1/B188: 99 2A 00     STA $002A,Y    (increment Current HP)
D1/B18B: BB           TYX
D1/B18C: 22 44 91 8F  JSL $8F9144
D1/B190: A2 36 00     LDX #$0036
D1/B193: BF 98 2F 7E  LDA $7E2F98,X  (get the level of Regrowth alchemy)
                                     (i think "LDA $7E2FCE" would've worked here)
D1/B197: 85 16        STA $16
D1/B199: 0A           ASL
D1/B19A: 0A           ASL
D1/B19B: 85 18        STA $18        (alchemy level * 4)
D1/B19D: A5 16        LDA $16
D1/B19F: 0A           ASL
D1/B1A0: 18           CLC
D1/B1A1: 65 18        ADC $18
D1/B1A3: 85 18        STA $18        (alchemy level * 6)
D1/B1A5: A9 3C 00     LDA #$003C
D1/B1A8: 38           SEC
D1/B1A9: E5 18        SBC $18        (get 60 - (alchemy level * 6))
D1/B1AB: 92 62        STA ($62)      (save it as frames to wait until next
                                      healing interval)
D1/B1AD: B2 60        LDA ($60)      (get overall timer)
D1/B1AF: 80 BF        BRA $B170

D1/B1B1: AD D2 15     LDA $15D2
D1/B1B4: D0 10        BNE $B1C6      (branch if caller wants granting message
                                      suppressed??  not sure when this would
                                      happen)
D1/B1B6: A9 E4 B1     LDA #$B1E4
D1/B1B9: 85 22        STA $22
D1/B1BB: A9 91 00     LDA #$0091
D1/B1BE: 85 24        STA $24        ($22-$24 = pointer to "Your wounds are healing"
                                      message)
D1/B1C0: 5A           PHY
D1/B1C1: 22 21 C5 8C  JSL $8CC521    (output message)
D1/B1C5: 7A           PLY
D1/B1C6: 80 C8        BRA $B190

D1/B1C8: A2 40 00     LDX #$0040     (ID of Regrowth status)
D1/B1CB: 18           CLC
D1/B1CC: 22 A7 B9 91  JSL $91B9A7    (clear status, and zero its timers)
D1/B1D0: AD D2 15     LDA $15D2
D1/B1D3: D0 0E        BNE $B1E3      (branch if caller wants expiration message
                                      suppressed)
D1/B1D5: A9 FC B1     LDA #$B1FC
D1/B1D8: 85 22        STA $22
D1/B1DA: A9 91 00     LDA #$0091
D1/B1DD: 85 24        STA $24        ($22-$24 = pointer to "Regrowth has worn off"
                                      message)
D1/B1DF: 22 21 C5 8C  JSL $8CC521    (output message)
D1/B1E3: 60           RTS

===================================

(Slow Burn status timer handler)

D1/B392: B2 60        LDA ($60)
D1/B394: F0 2E        BEQ $B3C4      (branch if Slow Burn timer value on this
                                      target is zero, meaning it was just set)
D1/B396: C9 08 07     CMP #$0708
D1/B399: 90 09        BCC $B3A4      (branch if 1800 frames haven't elapsed)
D1/B39B: A2 70 00     LDX #$0070     (ID of Slow Burn status)
D1/B39E: 18           CLC
D1/B39F: 22 A7 B9 91  JSL $91B9A7    (clear status, and zero its timers)
D1/B3A3: 60           RTS

D1/B3A4: 1A           INC
D1/B3A5: 92 60        STA ($60)      (increment timer)
D1/B3A7: B2 62        LDA ($62)
D1/B3A9: C9 78 00     CMP #$0078     (has time since last damage interval
                                      reached 120 yet?)
D1/B3AC: 90 12        BCC $B3C0      (branch if not)
D1/B3AE: A2 3C 00     LDX #$003C
D1/B3B1: BD 98 2F     LDA $2F98,X    (get the level of Slow Burn alchemy)
                                     (i think "LDA $2FD4" would've worked here)
D1/B3B4: 0A           ASL
D1/B3B5: 18           CLC
D1/B3B6: 69 04 00     ADC #$0004     (A = (alchemy level * 2) + 4)
D1/B3B9: 20 21 B6     JSR $B621      (inflict/queue this damage?)
D1/B3BC: 7B           TDC            (set A to 0)
D1/B3BD: 92 62        STA ($62)      (zero time since last damage interval)
D1/B3BF: 60           RTS

D1/B3C0: 1A           INC
D1/B3C1: 92 62        STA ($62)      (increment time since last damage
                                      interval)
D1/B3C3: 60           RTS

D1/B3C4: A9 78 00     LDA #$0078
D1/B3C7: 92 62        STA ($62)      (set time since last damage interval
                                      to 120)
D1/B3C9: B2 60        LDA ($60)      (get overall timer)
D1/B3CB: 20 A4 B3     JSR $B3A4
D1/B3CE: 80 D4        BRA $B3A4      (think "BRA $B3C0" would accomplish the
                                      same thing)

------------

(Corrosion status timer handler)

D1/B3D0: B2 60        LDA ($60)
D1/B3D2: F0 2E        BEQ $B402      (branch if Corrosion timer value on this
                                      target is zero, meaning it was just set)
D1/B3D4: C9 94 11     CMP #$1194
D1/B3D7: 90 09        BCC $B3E2      (branch if 4500 frames haven't elapsed)
D1/B3D9: A2 78 00     LDX #$0078     (ID of Corrosion status)
D1/B3DC: 18           CLC
D1/B3DD: 22 A7 B9 91  JSL $91B9A7    (clear status, and zero its timers)
D1/B3E1: 60           RTS

D1/B3E2: 1A           INC
D1/B3E3: 92 60        STA ($60)      (increment timer)
D1/B3E5: B2 62        LDA ($62)
D1/B3E7: C9 78 00     CMP #$0078     (has time since last damage interval
                                      reached 120 yet?)
D1/B3EA: 90 12        BCC $B3FE      (branch if not)
D1/B3EC: 22 9B 85 80  JSL $80859B    (get random #, 0 to 65535)
D1/B3F0: 29 07 00     AND #$0007     (make it [0..7])
D1/B3F3: 18           CLC
D1/B3F4: 69 04 00     ADC #$0004     (add to 4)
D1/B3F7: 20 21 B6     JSR $B621      (inflict/queue this damage?)
D1/B3FA: 7B           TDC            (set A to 0)
D1/B3FB: 92 62        STA ($62)      (zero time since last damage interval)
D1/B3FD: 60           RTS

D1/B3FE: 1A           INC
D1/B3FF: 92 62        STA ($62)      (increment time since last damage
                                      interval)
D1/B401: 60           RTS

D1/B402: A9 78 00     LDA #$0078
D1/B405: 92 62        STA ($62)      (set time since last damage interval
                                      to 120)
D1/B407: B2 60        LDA ($60)      (get overall timer)
D1/B409: 20 E2 B3     JSR $B3E2
D1/B40C: 80 D4        BRA $B3E2      (think "BRA $B3FE" would accomplish the
                                      same thing)

------------

(Plague status timer handler)

D1/B40E: B2 62        LDA ($62)      (get base damage for status)
D1/B410: F0 1C        BEQ $B42E      (branch if it has yet to be set)
D1/B412: B2 60        LDA ($60)
D1/B414: F0 05        BEQ $B41B      (branch if time since last damage interval
                                      is 0.  note that Plague has no overall
                                      timer, as it doesn't auto-expire.)
D1/B416: C9 F0 00     CMP #$00F0     (is time since last interval 250 yet?)
D1/B419: 90 25        BCC $B440
D1/B41B: 22 9B 85 80  JSL $80859B    (random #, 0 to 65535)
D1/B41F: 29 0F 00     AND #$000F     (make it 0 to 15)
D1/B422: 18           CLC
D1/B423: 72 62        ADC ($62)      (add to base damage)
D1/B425: 20 21 B6     JSR $B621      (inflict/queue the damage?)
D1/B428: A9 01 00     LDA #$0001
D1/B42B: 92 60        STA ($60)      (set time since last damage interval to 1)
D1/B42D: 60           RTS

D1/B42E: A4 6C        LDY $6C        (alchemy/status data pointer?)
D1/B430: F0 07        BEQ $B439      (branch if undefined?)
D1/B432: B9 2A 00     LDA $002A,Y
D1/B435: 92 62        STA ($62)      (save base damage provided by alchemy?)
D1/B437: 80 D9        BRA $B412      (can replace last two instructions with
                                      "BRA $B43C")
D1/B439: AD 9C 0E     LDA $0E9C      (is set to 5 if done by enemy Special [i.e.
                                      Mad Monk's].  unknown otherwise.)
D1/B43C: 92 62        STA ($62)      (save base damage)
D1/B43E: 80 D2        BRA $B412

D1/B440: 1A           INC
D1/B441: 92 60        STA ($60)      (increment time since last damage interval)
D1/B443: 60           RTS

------------

(Poison status timer handler)

D1/B444: B2 60        LDA ($60)
D1/B446: F0 52        BEQ $B49A      (branch if Poison timer value on this
                                      target is zero, meaning it was just set)
D1/B448: C9 08 07     CMP #$0708
D1/B44B: 90 17        BCC $B464      (branch if 1800 frames haven't elapsed)
D1/B44D: A2 90 00     LDX #$0090     (ID of Poison status)
D1/B450: 18           CLC
D1/B451: 22 A7 B9 91  JSL $91B9A7    (clear status, and zero its timers)
D1/B455: A9 A6 B4     LDA #$B4A6
D1/B458: 85 22        STA $22
D1/B45A: A9 91 00     LDA #$0091
D1/B45D: 85 24        STA $24        ($22-$24 = pointer to "Poison has worn off"
                                      message)
D1/B45F: 22 21 C5 8C  JSL $8CC521    (output message)
D1/B463: 60           RTS

D1/B464: 1A           INC
D1/B465: 92 60        STA ($60)      (increment timer)
D1/B467: B2 62        LDA ($62)
D1/B469: C9 E0 01     CMP #$01E0     (has time since last damage interval
                                      reached 480 yet?)
D1/B46C: 90 28        BCC $B496      (branch if not)
D1/B46E: B9 16 00     LDA $0016,Y
D1/B471: 29 FE FF     AND #$FFFE
D1/B474: 99 16 00     STA $0016,Y
D1/B477: BE 60 00     LDX $0060,Y    (get pointer to target's stat block?)
D1/B47A: BF 0F 00 8E  LDA $8E000F,X  (get target's Max HP)
D1/B47E: 4A           LSR
D1/B47F: 4A           LSR
D1/B480: 4A           LSR
D1/B481: 4A           LSR            (divide by 16)
D1/B482: 85 12        STA $12        (save as base damage)
D1/B484: 22 9B 85 80  JSL $80859B    (get random number, 0 to 65535)
D1/B488: 29 03 00     AND #$0003     (make it 0 to 3)
D1/B48B: 3A           DEC
D1/B48C: 3A           DEC            (make it [-2..1])
D1/B48D: 65 12        ADC $12        (add random value to base damage)
D1/B48F: 20 21 B6     JSR $B621      (inflict/queue the damage?)
D1/B492: 7B           TDC            (set A to 0)
D1/B493: 92 62        STA ($62)      (zero time since last damage interval)
D1/B495: 60           RTS

D1/B496: 1A           INC
D1/B497: 92 62        STA ($62)      (increment time since last damage
                                      interval)
D1/B499: 60           RTS

D1/B49A: A9 E0 01     LDA #$01E0
D1/B49D: 92 62        STA ($62)      (set time since last damage interval
                                      to 480)
D1/B49F: B2 60        LDA ($60)      (get overall timer)
D1/B4A1: 20 64 B4     JSR $B464
D1/B4A4: 80 BE        BRA $B464      (think "BRA $B496" would accomplish the
                                      same thing)
